const smallUnit = ['', '十', '百', '千']
const largeUnit = ['', '万', '亿', '兆', '京', '垓', '秭']
const digitalChinese = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']

/**
 * 将整数转为汉字
 * @param value 数字
 */
export function toDigitalChinese(value: number) {
  const chars = String(value).split('').reverse()
  const data: string[] = []

  let lastIndex = -1

  for (let index = chars.length; index--; ) {
    const char = Number(chars[index])
    const remainder = index % 4
    if (char !== 0) {
      // 已添加了非零数字 && 已添加的非零数字与当前的位差大于 1
      if (lastIndex !== -1 && lastIndex - index > 1) {
        // 添加零
        data.push(digitalChinese[0])
      }
      lastIndex = index
      data.push(digitalChinese[char], smallUnit[remainder])
      // 4 位大单位
      if (!remainder) {
        // 添加大单位
        data.push(largeUnit[Math.floor(index / 4)])
      }
    } else {
      // 4 位大单位 && 已添加了非零数字 && 已添加的非零数字与当前的位差不超过 4
      if (!remainder && lastIndex !== -1 && lastIndex - index < 4) {
        // 添加大单位
        data.push(largeUnit[Math.floor(index / 4)])
      }
    }
  }

  return data.join('')
}
